package dao;

import java.util.Date;
import java.util.List;

import model.Anfrage;
import model.Person;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
 * Aenderung: 04.06.12 RK Klassenimplementierung
 */

public class AnfrageDao extends HibernateDaoSupport {
	/**
	 * Creates and saves a {@link Anfrage} object.
	 * 
	 * @param anbieter
	 * @param suchender
	 * @param bewertung
	 * @param kommentar
	 * @param gueltigVon
	 * @param gueltigBis
	 * 
	 */
	public void create(Person anbieter, Person suchender, int bewertung,
			String kommentar, Date gueltigVon, Date gueltigBis) {
		Anfrage a = new Anfrage();
		a.setAnbieter(anbieter);
		a.setSuchender(suchender);
		a.setBewertung(bewertung);
		a.setKommentar(kommentar);
		a.setGueltigVon(gueltigVon);
		a.setGueltigBis(gueltigBis);
		save(a);
	}

	/**
	 * returns a single advertisement by its primary db key
	 * 
	 * @param id
	 * @return the request
	 */
	public Anfrage findById(int id) {
		HibernateTemplate template = getHibernateTemplate();
		return (Anfrage) template.get(Anfrage.class, id);
	}

	public Anfrage save(Anfrage Anfrage) {
		HibernateTemplate template = getHibernateTemplate();
		template.saveOrUpdate(Anfrage);
		return Anfrage;
	}

	public void delete(Anfrage Anfrage) {
		HibernateTemplate template = getHibernateTemplate();
		template.delete(Anfrage);
	}

	public int deleteAllfromUser(int pUserId) {
		String queryString = "delete from Anfrage where PID =" + pUserId;
		SQLQuery query = getSession().createSQLQuery(queryString);
		// query.setParameter("PID", pUserId);
		query.addEntity("Anfrage", Anfrage.class);
		int result = query.executeUpdate();
		return result;
		// "Das Anfrage kann nicht gelöscht werden, da sie bereits von einer Person angenommen ist."
	}

	/**
	 * @return all advertising objects from the database.
	 */
	@SuppressWarnings("unchecked")
	public List<Anfrage> findAll() {
		HibernateTemplate template = getHibernateTemplate();
		@SuppressWarnings("rawtypes")
		List results = template.loadAll(Anfrage.class);
		return results;
	}

	@SuppressWarnings("unchecked")
	public List<Anfrage> getAnfragebyAnbieter(Person anbieter) {
		// Für einen bestimmten User die Anfrage auslesen

		Criteria criteria = getSession().createCriteria(Anfrage.class);
		criteria.add(Restrictions.eq("anbieter", anbieter));
		criteria.addOrder(Order.asc("id"));
		List<Anfrage> a_Anfragee = criteria.list();
		return a_Anfragee;

		/*
		 * String queryString = "select * from Anfrage where PID = '" +
		 * anbieter.getId() + "'"; SQLQuery query =
		 * getSession().createSQLQuery(queryString); query.addEntity("anfrage",
		 * Anfrage.class); return query.list();
		 */
	}

	@SuppressWarnings("unchecked")
	public List<Anfrage> getAnfragebySuchender(Person suchender) {
		// Für einen bestimmten User die Anfrage auslesen

		Criteria criteria = getSession().createCriteria(Anfrage.class);
		criteria.add(Restrictions.eq("suchender", suchender));
		criteria.addOrder(Order.asc("id"));
		List<Anfrage> a_Anfragee = criteria.list();
		return a_Anfragee;

		/*
		 * String queryString = "select * from Anfrage where SID = '" +
		 * suchender.getId() + "'"; SQLQuery query =
		 * getSession().createSQLQuery(queryString); query.addEntity("anfrage",
		 * Anfrage.class); return query.list();
		 */

	}
}
